package com.wrial.kind.doublepointer;
/*
 * @Author  Wrial
 * @Date Created in 12:35 2020/8/7
 * @Description
 *
 * 输入: [0,1,0,3,12]   输出: [1,3,12,0,0]
 * 编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 双指针，快慢指针
 */

public class MoveZero {

    /**
     * 通过count记录非0元素个数
     * 快指针负责扫描非0，慢指针当快指针扫描到非0后插入相应位置（这样通过慢指针控制的数组不会有0）
     * 然后通过length-非0个数就是要补0的长度
     *
     * @param nums
     */
    public void moveZeroes(int[] nums) {
        int slow = 0;
        int noZeroCount = 0;
        for (int num : nums) {  //可以看做是快指针
            if (num != 0) {
                nums[slow] = num;
                noZeroCount++;
                slow++;
            }
        }
        for (int i = noZeroCount; i < nums.length; i++) {
            nums[i] = 0;
        }
    }

}
